package com.kqzz.common.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * @Description 解决配置自定义拦截器后,被拦截的请求无法跨域的问题
 * 				通过实现WebMvcConfigurer接口会导致被拦截的请求无法支持跨域，原因是请求经过的先后顺序问题，请求会先进入到自定义拦截器中，
 * 				而不是进入Mapping映射中，所以返回的头信息中并没有配置的跨域信息，浏览器就会报跨域异常。
 * @ClassName CorsConfig.java
 * @Package com.kqzz.epidemic.common.config 
 * @author lipeng
 * @date 2020年2月12日 上午8:31:39
 * 
 * @update_Desc
 * @update_Author
 * @update_Date
 *
 *  ██╗     ██╗    ██████╗ ███████╗███╗   ██╗ ██████╗ 
 *	██║     ██║    ██╔══██╗██╔════╝████╗  ██║██╔════╝ 
 *	██║     ██║    ██████╔╝█████╗  ██╔██╗ ██║██║  ███╗
 *	██║     ██║    ██╔═══╝ ██╔══╝  ██║╚██╗██║██║   ██║
 *	███████╗██║    ██║     ███████╗██║ ╚████║╚██████╔╝
 *	╚══════╝╚═╝    ╚═╝     ╚══════╝╚═╝  ╚═══╝ ╚═════╝
 */
@Order(Ordered.HIGHEST_PRECEDENCE)
@Configuration
public class CorsConfig {
	private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOriginPattern("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        //最终的结果是可以 在跨域请求的时候获取同一个 session
        corsConfiguration.setAllowCredentials(true);
        return corsConfiguration;
    }
 
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }
}
